import os
import time
import pathlib
import configparser

config = configparser.ConfigParser()
config.read('config.cfg')


def configuration_error_handler(location, name_section, option=None):
    match location:
        case 'section':
            error_message = f'Отсутствует секция {name_section} в config.cfg'
        case 'option':
            error_message = f'Отсутствует опция {option} в секции {name_section} config.cfg'
        case 'min_length':
            error_message = f'В секции {name_section} в config.cfg должно быть одно или более шаблонов'

    with open('errors.log', 'a') as file:
        file.write(
            f'[Error on {time.strftime("%d.%m.%Y %H:%M:%S")}] {error_message}\n'
            )


def data_collection():
    conf = {}

    # Проверка на существование секции Default
    if not config.has_section('Default'):
        configuration_error_handler('section', 'Default')
        return None

    elif not config.has_option('Default', 'home_dir'):
        configuration_error_handler('option', 'Default', 'home_dir')
        return None

    elif not config.has_option('Default', 'exclude_hidden'):
        configuration_error_handler('option', 'Default', 'exclude_hidden')
        return None

    else:
        conf['default'] = dict(config['Default'])

    # Проверка на существование секции Patterns
    if not config.has_section('Patterns'):
        configuration_error_handler('section', 'Patterns')
        return None

    elif len(config['Patterns']) < 1:
        configuration_error_handler('min_length', 'Patterns')
        return None

    else:
        conf['patterns'] = dict(config['Patterns'])

    if not config.has_section('IgnoreAppPaths'):
        conf['iap'] = None
    elif len(config['IgnoreAppPaths']) >= 1:
        conf['iap'] = dict(config['IgnoreAppPaths'])

    if not config.has_section('IgnoreUserPaths'):
        conf['iup'] = None
    elif len(config['IgnoreUserPaths']) >= 1:
        conf['iup'] = dict(config['IgnoreUserPaths'])

    return conf


def normalize_conf(conf):
    # Изменение пути в Default
    home_dir = conf['default']['home_dir']
    username = os.environ['USERNAME']
    conf['default']['home_dir'] = pathlib.Path(home_dir).joinpath(username)

    conf['patterns'] = [pattern for pattern in conf['patterns'].values()]

    # Нормализация булевских значений
    conf['default']['exclude_hidden'] = config.getboolean(
        'Default', 'exclude_hidden')

    # Изменение путей в IgnoreUserPaths
    if conf['iup'] is not None:
        conf['iup'] = [pathlib.Path(path) for path in conf['iup'].values()]
    return conf


def check():
    data = data_collection()
    if data is not None:
        return normalize_conf(data)
    else:
        return False


if __name__ == '__main__':
    check()
